package edu.bigdata;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * @Author z j h idea实用小技巧
 * @Date 2022-04-20 上午 8:48
 **/
public class timer {
    public timer(String time) throws ParseException, ParseException {
        //定时器
        ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
        //日期格式化
        final DateFormat dayFormat = new SimpleDateFormat("yy-MM-dd");
        final DateFormat dateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss");

        //一天的毫秒值
        long oneDay = 24 * 60 * 60 * 1000;
        //用当天日期加设定时间取得定时时间的毫秒值
        Date format = dateFormat.parse(dayFormat.format(new Date()) + " " + time);
        System.out.println("定时时间设置成功！");
        //定时时间与当前时间的间隔
        long initDelay = format.getTime() - System.currentTimeMillis();
        //当间隔时间大于0时说明还没到定时时间，小于0时说明已经过去了
        initDelay = initDelay > 0 ? initDelay : oneDay + initDelay;

        //initDelay 延迟第一次执行时间; oneDay 两次执行间隔时间; unit 时间单位（这里为毫秒）
        scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                /**
                 *  如果需要已经设置一种状态，想再设置其他状态，需要自己重新前往首界面选择命令进行重新设置定时时间
                 *  （自己做，重复的工作）
                 * */
                System.out.println("到定时时间啦！！！" +dateFormat.format(new Date()));
                final light light = new light();
                if (light.getSwitchState() == 3){
                    light.setSwitchState(4);
                    System.err.println(GLOBAL_STATE.SWITCH_STATE_OFF.getValue());
                }else {
                    light.setSwitchState(3);
                    System.err.println(GLOBAL_STATE.SWITCH_STATE_ON.getValue());
                }

            }
        }, initDelay, oneDay, TimeUnit.MILLISECONDS);

    }
}
